package ace.module.product.core.impl.manager.plugin;

import ace.module.product.api.model.bo.PmsProductSalesQuantityDetailBo;
import ace.module.product.api.model.bo.PmsSalesQuantityBo;
import ace.module.product.api.model.input.PmsProductSalesQuantityInitOrNoneInput;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.util.List;

/**
 * 商品销量插件管理者.
 *
 * @author Caspar
 *
 */
public interface PmsSalesQuantityPluginManager {


  /**
   * sku销量初始化或不进行任何操作.
   * 并且自动计算商品总销量.
   *
   * @param input 商品sku销量
   * @return 所有商品sku销量
   */
  PmsProductSalesQuantityDetailBo initOrNone(@Valid @NotNull PmsProductSalesQuantityInitOrNoneInput input);

  /**
   * 获取sku销量.
   *
   * @param tenantId 租户id
   * @param productSkuIds sku id
   * @return sku 销量
   */
  List<PmsSalesQuantityBo> getSkuByTenantIdAndProductSkuId(long tenantId, List<Long> productSkuIds);

  /**
   * 获取sku销量明细.
   *
   * @param tenantId 租户id
   * @param productId 商品id
   * @return sku销量明细
   */
  List<PmsSalesQuantityBo> getSkuByTenantIdAndProductId(long tenantId, long productId);

  /**
   * 获取商品销量总数量与sku销量明细.
   *
   * @param tenantId 租户id
   * @param productId 商品id
   * @return 商品销量总数量与sku销量明细
   */
  PmsProductSalesQuantityDetailBo getProductDetailByTenantIdAndProductId(long tenantId, long productId);

  /**
   * 获取商品销量总数量.
   *
   * @param tenantId 租户id
   * @param productId 商品id
   * @return 商品销量总数量
   */
  PmsSalesQuantityBo getProductByTenantIdAndProductId(long tenantId, long productId);
}
